package com.zb.service.base;

import org.springframework.web.multipart.MultipartFile;

import com.zb.entity.base.JsonCommon;
import com.zb.entity.base.JsonForList;
import com.zb.entity.base.OmsCommonParam;
import com.zb.entity.base.OmsStoreFile;

/**
 * 处理文件上传的相应逻辑
 * @author huanghao
 *
 */
public interface FileUploadService 
{
	/**
	 * 文件上传并插入到数据中
	 * @param file 上传的远程文件信息基于Spring mvc远程文件信息
	 * @param fileFuns  文件功能，自定义功能，只需要能查询
	 * @param entity 文件关联到的实例
	 * @param prefixPath 本地文件前缀文件路径，存在文件的目标路径父路径
	 * @param targerDir 存放文件的目标路径
	 * @param fileRequstPrefixPath 上传文件的请求路径，不包含文件名：比如http://localhost/xxx/
	 * @param createId 创建者id。
	 * @param fileId   如果是上传更新，需要改参数，否则添加，该参数可以为空
	 * @param entityId 文件关联到的实体ID
	 * @return 返回上传文件数据库实体相应信息
	 */
	JsonCommon<?> addFileUpload(MultipartFile file,String fileFuns,String entity,String prefixPath,
			String targerDir,String fileRequstPrefixPath,String createId,String fileId,String entityId);
	/**
	 * 文件上传，并不保存在数据库
	 * @param file 上传的远程文件信息基于Spring mvc远程文件信息
	 * @param prefixPath 本地文件前缀文件路径，存在文件的目标路径父路径
	 * @param targerDir 存放文件的目标路径
	 * @param fileRequstPrefixPath 上传文件的请求路径，不包含文件名：比如http://localhost/xxx/
	 * @return 返回上传文件数据库实体相应信息
	 */
	JsonCommon<?> addFileoUpload(MultipartFile file,String fileFuns,String prefixPath,String targerDir,String fileRequstPrefixPath);
	/**
	 * 
	 * @param fileName
	 * @param remoteFileName
	 * @param downloadPath
	 * @param entityTbl
	 * @param entityId
	 * @param fileFunction
	 * @param createId
	 * @return
	 */
	JsonCommon<?> addFile(String fileName,String remoteFileName,
			String downloadPath,String entityTbl,String entityId,String fileFunction,String createId);
	/**
	 * 
	 * @param fileId
	 * @param fileName
	 * @param remoteFileName
	 * @param downloadPath
	 * @param entityTbl
	 * @param entityId
	 * @param fileFunction
	 * @param userId
	 * @return
	 */
	JsonCommon<?> updateFile(String fileId,String fileName,
			String remoteFileName,String downloadPath,String entityTbl,String entityId,String fileFunction);
	/**
	 * 
	 * @param fileId
	 * @return
	 */
	JsonCommon<?> deleteFile(String fileId);
	/**
	 * 
	 * @param params
	 * @param findCondition
	 * @return
	 */
	JsonForList<?> findPageOrAll(OmsCommonParam params,OmsStoreFile findCondition);
}